← LAB ↑ TOC ↑

Name, Vorname:
Hofmann Fabian
Richter Daniel

LAB 3: Filterentwurf mit pyfda

In diesem Versuch

Inhalt

0. Allgemeine Hinweise

1. Überblick über pyfda

2. Filterentwurf

3. Filterexport und -simulation

0. Allgemeine Hinweise

0.1 Jupyter Notebook

Abbildungen in diesem Notebook wurden konvertiert mit https://www.base64-image.de/ und in den HTML-Code eingebettet.

0.2 Installation von pyfda

Für diesen Versuch benötigen Sie die Software pyfda (Python Filter Design and Analysis), die Sie per pip install pyfda installieren können (wenn Sie eine Python-Installation auf Ihrem Rechner haben), alternativ gibt es unter https://github.com/chipmuenk/pyfda Binaries für Windows und für Ubuntu 20.10 (funktioniert vermutlich auch mit anderen halbwegs aktuellen Distros).

0.3 Abgabe

Nach dem Praktikumsversuch exportieren Sie das Notebook mit Textantworten, Codezellen und Plots als HTML (File -> Export Notebook As ... -> Export Notebook to HTML) und reichen es in Moodle ein.</div>


1. Überblick über pyfda

Auf der linken Seite wählen und entwerfen Sie Filter unter den Tabs "Specs" (Filterentwurf), "b,a" (Eingabe von Filterkoeffizienten), "P/Z" (Eingabe von Polen und Nullstellen). Auf der rechten Seite schauen Sie sich Betrags- und Phasengang, Gruppenlaufzeit, P/N Diagramm und die transiente Antwort auf verschiedene Stimuli an.

1.1. Frequenzen und Amplituden

Frequenzen können in unterschiedlicher Form eingeben und angezeigt werden:

Amplituden werden in V, W oder dB eingegeben und angezeigt.

1.2 Filterspezifikationen

Filterentwurfsalgorithmen benötigen unterschiedliche Eingabeparameter. Wenn "Order Minimum" angeklickt ist, versucht ein Algorithmus die minimale Ordnung zu den gegebenen Filterspezifikationen zu berechnen, halbwegs genau funktioniert das aber nur bei Equiripple (FIR) und den meisten IIR-Filtern. Bei pyfda können Sie nach dem Entwurf mit minimaler Ordung das Häkchen entfernen und dann selber Entwurfsparameter bearbeiten.

Nicht benötigte Parameter sind entweder deaktiviert oder ausgeblendet. Manche Parameter sind ausgegraut, aber bearbeitbar: Diese Parameter beeinflussen nicht den Filterentwurf, sie dienen aber z.B. dazu um das Toleranzschema anzuzeigen.

2. Filterentwurf

Ein Audiotrack von einer CD ($f_S = 44,1 \,\text{kHz}$) soll tiefpassgefiltert werden. Die Filterspezifikationen sind:

Es sollen die folgenden Filtertypen getestet werden:

2.1 Filtervergleich

SIMULATION:

Ermitteln Sie die folgenden Filtereigenschaften und fassen Sie sie in einer Tabelle zusammen mit den Spalten:

Filtertyp IIR/FIR? Ordnung N Gruppenlaufzeit τg Mult. L pro Sample Max. Samplerate [GHz] Vorteil Nachteile
Fourier-Approximation /
Least-Square(Windowed FIR mit Boxcar-Fenster)
FIR 164 1.84 ps 164 1.83 geringe Nichtlinearität hohe Rippel / zu geringe Steilheit
Windowed FIR mit Kaiser-Fenster FIR 268 30.2 ns 268 1.12 keine Rippel im Sperrbereich / hohe Däpfung im Sperrbereich mittlerer Rippel im Sperrbereich
Equiripple FIR 163 18.4 ps 163 1.8 geringe Nichtlinearität hoher Rippel
Butterworth IIR PyFDA -> max. 20
f_SB = 4.7kHz
1.46 ms 23 13.0 kein Rippel / geringe Nichttlinearität geringe Steilheit
Chebychev 1 IIR 14 4.75 ms 17 17.6 mittlere Steilheit hoher Rippel im Durchlassband / hohe Nichttlinearität
Chebychev 2 IIR 14 1.48 ms 17 17.6 mittlere Steilheit hoher Rippel im Sperrbereich / hohe Nichttlinearität
Elliptisch (Cauer) IIR 7 2.31 ms 10 30 geringe Ordung hoher Rippel
DirektformLin. phasige FormKaskadierte Second Order Sections

3. Filterexport und -simulation

Im folgenden sollen Sie Audiofiles mit dem Equiripple und dem elliptischen Filter filtern. Dazu können Sie aus pyfda Filter in verschiedenen Formaten exportieren:

Sie können Daten im Zeitbereich filtern mit

y = sig.lfilter(b,a,x)

b und a sind die Koeffizientenvektoren (nicht-rekursiver / rekursiver Teil), x ist das Eingangssignal. y hat die gleichen Dimensionen wie x (es können auch Stereofiles verarbeitet werden). Was müssen Sie bei einem FIR-Filter für a angeben?

* a = [1, 0, 0, ....] = [1]


Wenn die Filterbeschreibung als Second-Order Sections vorliegt, kann auch der folgende Befehl benutzt werden (allerdings unterstützt pyfda noch keinen Export im sos - Format):

y = sig.sosfilt(sos,x)

Anhören können Sie sich die gefilterten Audiofiles wieder mit display(Audio(data=y, rate=wav2np.f_S)).

Sie können auch eigene WAV-Files in Ihr medien Verzeichnis hochladen und testen, bei großen Audiofiles sollten Sie zunächst nur ein paar Sekunden testhören (mit x[:N_samples] bzw. x[:, :N_samples]) bei Stereo-Samples. Was bewirkt die seltsame Syntax bei Stereosignalen?

Hören Sie einen Unterschied zwischen dem Orginal und den beiden unterschiedlichen Filtern? Woran liegt das?


(c) 2016 - 2021 Prof. Dr. Christian Münker

This jupyter notebook is part of a collection of notebooks on various topics of Digital Signal Processing. The latest version can be found at https://github.com/chipmuenk/dsp.

This notebook is provided as Open Educational Resource. Feel free to use it for your own purposes. The text is licensed under Creative Commons Attribution 4.0, the code of the IPython examples under the MIT license. Please attribute the work as follows: Christian Münker, Digital Signal Processing - Vorlesungsunterlagen mit Simulationsbeispielen, 2020.